#ifndef __BUTTON_H__
#define __BUTTON_H__

#include "device.h"

#ifdef __cplusplus
extern "C" {
#endif

// BUTTON事件
enum {
    BUTTON_CLICKED = 0U, // 按键按下
    BUTTON_RELEASED,     // 按键释放
};

// BUTTON结构体
DEVICE_FEATURE_DECLARE 
(
    Button ,

    struct {
        /**
        * @brief BUTTON驱动接口
        * @return BUTTON状态
        */
        uint8_t (*pfnRead)(void);
    },

    struct {
        uint8_t u8Active;          // 有效状态
        uint8_t u8State;           // 当前状态
        uint16_t u16Reserved;      // 保留字段
    }

);

/**
 * @brief BUTTON设备注册
 * @param pstSelf BUTTON设备结构体
 * @return Device_t* 注册成功返回设备结构体指针，失败返回NULL
 */
 DEV_REG_DEC(button, Button_t)

/**
 * @brief 按键监控
 * @param pstDevice 设备结构体指针
 * @return @see DEV_RET_t
 */
DEV_RET_t
button_monitor(Device_t* pstDevice);

#ifdef __cplusplus
}
#endif

#endif /* __BUTTON_H__ */
